#ifndef FACE_FEATURE_ARCFACE_H
#define FACE_FEATURE_ARCFACE_H

#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
#include <unistd.h>
#include <omp.h>

#include "rt_model_operation.h"

using namespace algocommon;


namespace arcfacefeature
{
    


    struct InitParams: public OnnxModeltoTRTParam
    {
        int gpu_id;
        std::string onnx_model_path;
        std::string trt_model_dir;
        std::string trt_model_name;
    };



    class ArcfaceFeature: public OnnxModeltoTRT
    {
    public:

        ArcfaceFeature(const InitParams &params);

        virtual  ~ArcfaceFeature(){};
        std::vector<float >  Execute(const cv::Mat &img);


    private:
        Result InitNetwork();

        

        std::vector<float> PostProcessCPU(std::vector<TensorFloat>&output_vectors);


        void PreProcessCPU(const cv::Mat &img);

    private:

        InitParams params_;


        std::vector<float> std_ = {0.5, 0.5, 0.5};
        std::vector<float> mean_ = {0.5, 0.5, 0.5};





    };








};  //  namespace arcfacefeature



















#endif